#ifndef _TRANS_HANDLE_TABLES_ACT_H_
#define _TRANS_HANDLE_TABLES_ACT_H_
#include "md5/md5.h"
#include "../trans_file_server.h"
//---------------------------------------------------

//todo上传文件插入数据库表操作的函数

//TODO1查询当前目录下是否有对应的文件(gets和puts都要使用)
//需要的参数有1.数据库连接指针/2.user_session(用户名,路径名)3.文件名
//4.一个32位的字符数组(有同名文件存在，把这文件的哈希值装入这33位的字符数组，没有就写空字符bzero)
//对于结果的返回值有三种1."-1"：数据库操作失败2."0":没有对应的文件3."1":有对应的文件
int CheckFileExist(user_session_t *session, char *filename, char *md5_value_record);
//下面是专门针对puts而设计的函数

//TODO2查询表内是否有对应哈希值的文件(暂时不写，在磁盘目录，可以直接用access查找)
//需要的参数有1.数据库连接指针/2.哈希值字符数组
//对于结果的返回值有三种1."-1"：数据库操作失败2."0"：没有对应的文件3."1"：有对应的文件

//TODO3对数据库进行插入操作
//针对(用户路径下没有同名文件，直接插入一行表格)
//需要的参数有1.数据库连接指针，2.哈希值字符数组，3.user_session结构体对象，4.文件名
//对于结果的返回值有两种1.“-1”：数据库操作失败2.“1”：数据库操作成功
int MYSQL_Data_Insert(user_session_t *session, char *filename, char *md5_value_insert);

//TODO4对数据库进行覆盖操作
//针对(用户路径下有同名文件，所以需要先查出这行数据，然后把原本的哈希值更改为新的哈希值)
//对于结果的返回值有两种1.“-1”：数据库操作失败2.“1”：数据库操作成功
int MYSQL_Data_Replace(user_session_t *session, char *filename, char *md5_value_replace);

//以下都是针对puts设计的思路分解，需要客户端先把哈希值传过来
//情况1.无同名文件，查数据库表的哈希值/所有puts上传的文件要在磁盘中通过哈希值命名/
//1.1根据客户端传入的哈希值，磁盘有同哈希值的文件,服务端插表操作，返回标志位(PUTS_FILE_EXIST)，客户端反馈用户妙传成功
//1.2根据客户端传入的哈希值，磁盘没有同哈希值的文件，返回标志位(PUTS_FILE_NOEXIST)，客户端开始和服务端传输文件
//,服务端通过小火车接收(中间断传直接删除文件，删除对应哈希值名的文件)，上传成功后插表，反馈

//情况2.有同名文件，查数据库表的哈希值/根据返回值比较客户端哈希值/所有puts上传的文件要在磁盘中通过哈希值命名/
//2.1哈希值相同，服务端插表操作(实际不插)，返回标志位(PUTS_FILE_EXIST)，客户端反馈用户妙传成功
//2.2哈希值不同，返回标志位(PUTS_FILE_NOEXIST)，客户端开始和服务端传输文件
//,服务端通过小火车接收(中间断传直接删除文件，删除对应哈希值名的文件)，上传成功后插表，反馈

//---------------------------------------------------
//计算文件哈希值的函数
int Compute_file_md5(const char *file_path, char *md5_str);
//主调函数需要传入一个文件名，字符数组,将计算出的哈希值返回给主调函数
int Get_File_Md5Value(char *filename,char *str_ptr);
//---------------------------------------------------

#endif
